スレッド構築補助スクリプト

動作内容:

・電信八号で、スレッド構築をより確実に行うため、、In-Reply-To: が
 付いていないメイル(OEから等)に、References: の最後尾のIDをコ
 ピーし、In-Reply-To: 句として挿入する
・In-Reply-To: およびReferences: のどちらとも付いていないメイルに、
 元メイルのMessage-Id: とReferences: を挿入する
 (元メイルにてスクリプトを実行すると必要なヘッダがテンポラリファ
 イルに一旦コピーされ、対象メイルにて再度実行することにより、挿入
 動作が行われます。なお、元メイルは手動で探す必要があります、汗)

動作確認環境:

 電信八号(V321.2b5以降で確認しています)
 電信八号らぶらぶビューワ(version 0.67.0以降で確認しています)
 Perlが動作する環境

使用方法:

 1.下のスクリプトをコピーし、適当な名前で保存する
    例:addirt.pl
 2.電ラブのrcファイルにスクリプト呼び出しを記述する
    例:(パスは必要に応じてご変更ください)
     bindkey M-e exec "perl addirt.pl" $curfile

判っている不具合および改善を要す箇所:

 電信八号メイル形式以外のファイルを読み込もうとすると、無限ループ
 に陥るものと思われます。

謝辞:

 最後になりましたが、電信八号を開発された石岡さんと電八倶楽部のみ
 なさん、電信八号らぶらぶビューワを開発された山田さんにこの場を借
 りてお礼申し上げます。
 いつも便利に使用させて頂き、ありがとうございます。こんな素晴らし
 いソフトをフリーで公開して下さっているなんて、本当に感激です。

付録:

 電信八号オフィシャルサイト http://denshin8.esprix.net/
 山田さんのホームページ http://www.kh.rim.or.jp/~s-yamada/


以上です。拙文をわざわざお読み頂き、ありがとうございました。

-- 
Osamu Ogawa / 小川 修
mailto:jikoman@ogawa.8k.com

# addirt.pl 2000-10-26 $tpf=&dchange($ENV{'TMP'})."/addirt.tmp"; $afi=&dchange($ARGV[0]); open(INI,$afi); @lines=<INI>; close(INI); for(;;){ # $cur=&dchange(shift(@lines)); $cur=shift(@lines); if (&small($cur)=~/^references: /) { @new2=@new1; @new1=@new; @new=$cur; $ref=$cur; @refa=$cur; # $cur=&dchange(shift(@lines)); $cur=shift(@lines); push(@refa,$cur); while ($cur=~/^[\s\t]/) { push(@new,$cur); $ref=$cur; # $cur=&dchange(shift(@lines)); $cur=shift(@lines); push(@refa,$cur); } unshift(@lines,$cur); $ind1=pop(@refa); $ind1=index($ref,"<"); $ind2=index(substr($ref,$ind1+1),"<"); for(;;){ if ($ind2 eq -1) { last; } $ref=substr($ref,$ind1+$ind2); $ind1=index($ref,"<"); $ind2=index(substr($ref,$ind1+1),"<"); } $ref=substr($ref,$ind1); } else { push(@new,$cur); if (&small($cur)=~/^in-reply-to: /) { $irt=$cur; } if (&small($cur)=~/^message-id: /) { $msg=$cur; @new2=@new1; @new1=@new; @new=(); } } if ($cur eq "--------\n") { last; } } if ($ref) { unless ($irt) { push(@new2,"In-Reply-To: Add ".$ref); } } unless ($ref.$irt) { open(INI,$tpf); @tpi=<INI>; close(INI); if (@tpi) { $nms=shift(@tpi); $nms=~s/(.*)[0-9][0-9][0-9][0-9]\....\n/\1/; $cur=$afi; $cur=~s/(.*)[0-9][0-9][0-9][0-9]\..../\1/; if ($nms eq $cur) { $nms=shift(@tpi); $nms=~s/.*(<.*>).*/\1/; push(@new1,"In-Reply-To: Add ".$nms); unless (@tpi) { push(@new1,"References: ".$nms); } else { push(@new1,@tpi); push(@new1," ".$nms); } $ptr=-1; } } } unlink $tpf; unless($ptr) { if ($msg) { open(OUT,"> ".$tpf); print OUT $afi."\n"; print OUT $msg; print OUT @refa; close(OUT); } } $uid=shift(@lines); if (&small($uid)=~/^x-uidl: /) { $spa=shift(@lines); if ($spa eq "\n") { $spa=pop(@new); } unshift(@lines,$spa); } unshift(@lines,$uid); open(OUT,"> ".$afi); print OUT @new2; print OUT @new1; print OUT @new; print OUT @lines; close(OUT); exit; sub dchange { local ($_)=@_; 1 while s/\\/\//; $_; } sub small { local($_) = @_; $_ =~tr/A-Z/a-z/; $_; }
まえにもどる